package com.ruoyi.littleRedBook.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.littleRedBook.domain.pojo.Product;
import com.ruoyi.littleRedBook.mapper.ProductMapper;
import com.ruoyi.littleRedBook.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;

@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {

    @Autowired
    private ProductMapper productMapper;

    // 实际项目中从Token/Session获取当前登录用户ID，此处占位示例
    private Long getCurrentUserId() {
        return 1L; // 需替换为真实的当前用户ID获取逻辑
    }

    @Override
    public AjaxResult addProduct(Product product) {
        // 1. 填充基础信息
        Long sellerId = getCurrentUserId();
        product.setSellerId(sellerId);
        product.setStatus(0); // 上架默认状态：待审核
        product.setViewCount(0);
        product.setLikeCount(0);
        if (product.getStock() == null) {
            product.setStock(1); // 默认库存1（二手商品常用）
        }
        if (product.getIsNew() == null) {
            product.setIsNew(0); // 默认二手（可根据需求调整）
        }

        // 2. 校验必填字段
        if (product.getCategoryId() == null || product.getTitle() == null || product.getPrice() == null) {
            return AjaxResult.error("分类、标题、价格为必填项");
        }

        // 3. 保存商品
        int rows = productMapper.insert(product);
        if (rows > 0) {
            return AjaxResult.success("商品上架成功，等待审核", product);
        } else {
            return AjaxResult.error("商品上架失败");
        }
    }

    @Override
    public AjaxResult editProduct(Product product) {
        // 1. 校验商品归属
        Long productId = product.getId();
        if (productId == null) {
            return AjaxResult.error("商品ID不能为空");
        }
        Product oldProduct = productMapper.selectById(productId);
        Long currentUserId = getCurrentUserId();
        if (oldProduct == null || !oldProduct.getSellerId().equals(currentUserId)) {
            return AjaxResult.error("商品不存在或无编辑权限");
        }

        // 2. 校验编辑权限（仅待审核、审核通过、审核驳回状态可编辑）
        Integer status = oldProduct.getStatus();
        if (status == 3 || status == 4) { // 已下架、已售出不可编辑
            return AjaxResult.error("已下架/已售出商品不可编辑");
        }

        // 3. 禁止修改关键字段
        product.setSellerId(null); // 禁止篡改卖家ID
        product.setStatus(null); // 状态通过审核流程修改，禁止直接编辑
        product.setViewCount(null);
        product.setLikeCount(null);

        // 4. 更新商品
        int rows = productMapper.updateById(product);
        if (rows > 0) {
            return AjaxResult.success("商品编辑成功");
        } else {
            return AjaxResult.error("商品编辑失败");
        }
    }

    @Override
    public AjaxResult offlineProduct(Long id) {
        // 1. 校验商品归属
        Product product = productMapper.selectById(id);
        Long currentUserId = getCurrentUserId();
        if (product == null || !product.getSellerId().equals(currentUserId)) {
            return AjaxResult.error("商品不存在或无下架权限");
        }

        // 2. 校验下架权限（仅审核通过状态可下架）
        if (product.getStatus() != 1) { // 非审核通过状态（0待审核、2驳回、3已下架、4已售出）不可下架
            return AjaxResult.error("仅审核通过的商品可下架");
        }

        // 3. 更新状态为已下架
        product.setStatus(3);
        int rows = productMapper.updateById(product);
        if (rows > 0) {
            return AjaxResult.success("商品下架成功");
        } else {
            return AjaxResult.error("商品下架失败");
        }
    }

    @Override
    public AjaxResult getMyOnsaleProducts() {
        Long sellerId = getCurrentUserId();
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("seller_id", sellerId)
                    .eq("status", 1) // 审核通过
                    .orderByDesc("updated_at"); // 按更新时间倒序
        List<Product> productList = productMapper.selectList(queryWrapper);
        return AjaxResult.success(productList);
    }

    @Override
    public AjaxResult getMySoldProducts() {
        Long sellerId = getCurrentUserId();
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("seller_id", sellerId)
                    .eq("status", 4) // 已售出
                    .orderByDesc("updated_at");
        List<Product> productList = productMapper.selectList(queryWrapper);
        return AjaxResult.success(productList);
    }

    @Override
    public AjaxResult getMyPendingProducts() {
        Long sellerId = getCurrentUserId();
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("seller_id", sellerId)
                    .eq("status", 0) // 待审核
                    .orderByDesc("created_at");
        List<Product> productList = productMapper.selectList(queryWrapper);
        return AjaxResult.success(productList);
    }

    @Override
    public AjaxResult getMyRejectedProducts() {
        Long sellerId = getCurrentUserId();
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("seller_id", sellerId)
                    .eq("status", 2) // 审核驳回
                    .orderByDesc("updated_at");
        List<Product> productList = productMapper.selectList(queryWrapper);
        return AjaxResult.success(productList);
    }

    @Override
    public AjaxResult getProductDetail(Long id) {
        // 1. 查询商品详情
        Product product = productMapper.selectById(id);
        if (product == null || product.getStatus() != 1) { // 仅审核通过的商品可查看详情
            return AjaxResult.error("商品不存在或未上架");
        }

        // 2. 浏览量+1
        product.setViewCount(product.getViewCount() + 1);
        productMapper.updateById(product);

        return AjaxResult.success(product);
    }

    @Override
    public AjaxResult getProductList(Integer pageNum, Integer pageSize) {
        // 分页查询审核通过的商品
        Page<Product> page = new Page<>(pageNum, pageSize);
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", 1)
                    .orderByDesc("created_at");
        Page<Product> productPage = productMapper.selectPage(page, queryWrapper);
        return AjaxResult.success(productPage.getRecords());
    }

    @Override
    public AjaxResult searchProducts(String keyword, Long categoryId, BigDecimal minPrice, BigDecimal maxPrice, Integer pageNum, Integer pageSize) {
        Page<Product> page = new Page<>(pageNum, pageSize);
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", 1); // 仅查询审核通过的商品

        // 关键词筛选（标题模糊匹配）
        if (keyword != null && !keyword.trim().isEmpty()) {
            queryWrapper.like("title", keyword.trim());
        }

        // 分类筛选（父分类下的所有子分类，此处简化为直接匹配分类ID，如需多级分类需递归查询）
        if (categoryId != null && categoryId != 0) {
            queryWrapper.eq("category_id", categoryId);
        }

        // 价格范围筛选
        if (minPrice != null) {
            queryWrapper.ge("price", minPrice);
        }
        if (maxPrice != null) {
            queryWrapper.le("price", maxPrice);
        }

        // 排序（按创建时间倒序）
        queryWrapper.orderByDesc("created_at");

        Page<Product> productPage = productMapper.selectPage(page, queryWrapper);
        return AjaxResult.success(productPage.getRecords());
    }
}
